#!/usr/bin/env python
# -*- coding: UTF-8 -*-

"""
Диалог для постобработки картинки
"""

import wx

import tex

class EditImageDlg (wx.Dialog):
	def __init__(self, parent, text, id = -1, title = "", pos = wx.DefaultPosition, \
			size = wx.DefaultSize, style = wx.DEFAULT_DIALOG_STYLE, name = "dialog"):
		wx.Dialog.__init__(self, parent, id, title, pos, size, style, name)
		
		self.SetTitle (u"Сохранение изображения")
		self.text = text
		self.texCompiler = tex.MimeTex ("mimetex")

		# Параметры mimeTex
		self.fontsize = 3

		# Картинка с формулой
		self.result_image = wx.StaticBitmap (self)

		# Размер шрифта
		fontsize_label = wx.StaticText (self, -1, u"Размер шрифта")

		self.fontsizeId = wx.NewId()
		fontitems = [str (n) for n in range (8)]
		self.fontsize_combo = wx.ComboBox(self, self.fontsizeId, style = wx.CB_DROPDOWN | wx.CB_READONLY, choices = fontitems)
		self.fontsize_combo.SetSelection (self.fontsize)
		self.Bind (wx.EVT_COMBOBOX, self.onChangeFontSize, id = self.fontsizeId)

		# Размер изображения
		widthLabel = wx.StaticText (self, -1, u"Ширина изображения")
		self.widthTextCtrl = wx.TextCtrl (self, -1, style = wx.TE_READONLY )

		heightLabel = wx.StaticText (self, -1, u"Высота изображения")
		self.heightTextCtrl = wx.TextCtrl (self, -1, style = wx.TE_READONLY )


		# Кнопки OK / Отмена
		self.button_ok = wx.Button(self, wx.ID_OK, "OK")
		self.button_cancel = wx.Button(self, wx.ID_CANCEL, u"Отмена")

	
		# Расположение элементов с помощью сайзеров
		self.main_sizer = wx.BoxSizer (wx.VERTICAL)

		# Картинка
		self.main_sizer.Add (self.result_image, flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALL, border = 4)

		# Размер шрифта
		fontsizer = wx.FlexGridSizer (1, 2)
		fontsizer.AddGrowableCol (0)
		fontsizer.AddGrowableCol (1)

		fontsizer.Add (fontsize_label, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL, border = 4)
		fontsizer.Add (self.fontsize_combo, \
			flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.ALIGN_RIGHT, \
			border = 4)

		self.main_sizer.Add (fontsizer, flag = wx.EXPAND)

		# Размер изображения
		sizeSizer = wx.FlexGridSizer (2, 2)
		sizeSizer.AddGrowableCol (0)
		sizeSizer.AddGrowableCol (1)

		sizeSizer.Add (widthLabel, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL, border = 4)
		sizeSizer.Add (self.widthTextCtrl, \
			flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.ALIGN_RIGHT, \
			border = 4)

		sizeSizer.Add (heightLabel, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL, border = 4)
		sizeSizer.Add (self.heightTextCtrl, \
			flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.ALIGN_RIGHT, \
			border = 4)

		self.main_sizer.Add (sizeSizer, flag = wx.EXPAND)


		# Кнопки OK / Отмена
		buttons_sizer = wx.StdDialogButtonSizer()
		buttons_sizer.AddButton (self.button_ok)
		buttons_sizer.AddButton (self.button_cancel)
		buttons_sizer.Realize ()
		
		self.main_sizer.Add (buttons_sizer, flag = wx.ALIGN_BOTTOM | wx.ALIGN_RIGHT | wx.ALL, border = 4)

		self.SetSizer (self.main_sizer)

		self.updateImage()

	
	def onChangeFontSize (self, event):
		self.fontsize = self.fontsize_combo.GetSelection()
		self.updateImage()

	
	def updateImage (self):
		params = "-s %d" % (self.fontsize)

		self.image = self.texCompiler.compile (self.text, True, params)
		self.result_image.SetBitmap (self.image.ConvertToBitmap() )

		self.widthTextCtrl.SetValue (unicode (self.image.GetWidth() ) )
		self.heightTextCtrl.SetValue (unicode (self.image.GetHeight() ) )

		self.Fit()
		self.Refresh()
